# -*- coding: utf-8 -*-
# @Author	: starview.guojian.ma
# @Date		: 2022/5/23 16:08
# @Last Modified by:   starview.guojian.ma
# @Last Modified time: 2022/5/23 16:08
# Thanks for your comments!
from pydantic import BaseModel
from typing import Optional, List, Dict

from src.seedwork.domain.entities import PyObjectId
from src.seedwork.domain.po import PO


class DepartmentPO(PO):
    # XHHK_Team
    id: Optional[PyObjectId]
    code: str
    name: str
    pydm: Optional[str] = ''
    parent_id: Optional[PyObjectId]
    app_id: PyObjectId
    category: str = ''  # 1-临床，2-行政，3-医技，20-其他  科室类型
    address: str = ''
    name_acronym: str = ''
    name_spell: str = ''


class PersonPO(PO):
    # XHHK_Person
    id: Optional[PyObjectId]
    app_id: PyObjectId
    type: Optional[int]  # # 0其他，1药师，2医生，3护士
    name: str
    employee_number: str  # 工号
    his_code: Optional[str] = ''  # his工号
    id_number: Optional[str] = ''  # 身份证
    occupation_no: str = ''  # 资格证号
    title: str = ''
    sign: str = ''  # 签名
    dept_code: str = ''  # 科室
    gender: str  # 性别，1男2女
    telephone: str = ''  # 手机
    birthdate: Optional[int]  # 生日
    country: Optional[str] = ''  # 国家
    post: Optional[str] = ''  # 职务
    pydm: Optional[str] = ''  # 拼音代码
    routing_key: Optional[str] = ''
    wx_open_id: Optional[str] = ''  # 微信openid
    antibac_level: Optional[int]  # 抗菌药物权限
    pres_right: Optional[int]  # 开方权限
    psych_level: Optional[int]  # # 麻醉药权限
    narcotic_level: Optional[int]  # 精神药权限


class ApplicationMedicineLibraryMapPO(PO):
    # SFLZ_ApplicationMedicineLibraryMap
    id: Optional[PyObjectId]
    app_id: PyObjectId
    library_id: PyObjectId


class MedicineLibraryPO(PO):
    # SFLZ_MedicineLibrary
    id: Optional[PyObjectId]
    name: str = '默认药品库'  # 药品库名称
    type: str = "1000"  # 药品库类型  1000-审方 2000流转
    remark: str = ''  # 备注


class MedicineLibraryListPO(PO):
    # SFLZ_MedicineLibraryList
    id: Optional[PyObjectId]
    library_id: PyObjectId  # 药品库Id
    std_medicine_id: Optional[PyObjectId]  # 标准药品Id
    code: str  # 药品code
    bar_code: str = ''  # 药品二维码
    medicine_name: str  # 药品名称
    trace_code: str = ''  # 药品追溯码
    medicare_drug: str = ''  # 医保用药标志
    medicare_code: str = ''  # 医保编码
    medicare_type: str = '5'  # # 医保类型 0-其他、1-甲类、2-乙类、3-丙类、4-丁类、5未知
    medicare_name: Optional[str]  # 医保名称
    medicare_remark: str = ""  # 医保备注
    general_name: str = ''  # 通用名称
    english_name: str = ''  # 英文名
    trade_name: str = ''  # 商品名
    chemistry_name: str = ''  # 化学名称
    acronymy: str = ''  # 拼音代码
    approval_no: str = ''  # 批准文号
    manufacturer: str = ""  # 生产厂家
    status: Optional[str]  # 审核状态
    dosage_form_standard: Optional[PyObjectId]  # 标准药品剂型
    dosage_form: str = ''  # 药品剂型
    spec: str = ''  # 药品规格
    uom: str = ''  # 剂量单位
    total_qty: str = ''  # 剂量数
    usage_attr: Optional[str]  # 发药方式
    package_spec: str = ''  # 包装规格
    packing_uom: str = ''  # 包装单位
    packing_min_uom: str = ''  # 最小包装单位（最小制剂单位）
    packing_min_qty: str = ''  # 最小包装的数量
    factor: str = ''  # 转化系数
    cn_west_flag: str = '1'  # 中西药标识 1-西药、2-中成药、3-中药饮片
    basic_drug: str = '0'  # 基药标识 0：非、1：基药
    medicine_type: str = '-1'  # 药品类型 1：处方药、0：非处方药
    conversion: float = 1.0  # 药品单位与标准规则转换系数，默认为1
    injection: str = '0'  # 是否是针剂
    antibacterial: str = '0'  # 是否是抗菌药物
    antitumor: str = '0'  # 是否是抗肿瘤药物
    toxic: Optional[str]  # 毒性药品
    narcotic_psychotropic: Optional[str]  # 麻醉精神药品
    high_risk: Optional[str]  # 高警示药品
    radioactive: Optional[str]  # 放射药品
    adjuvant: Optional[str]  # 辅助用药
    expensive: str = '-1'  # 高价药判别
    antibac_type: str = '0'  # 抗菌药物等级 0-非抗菌，1-一线、2-二线、3-三线
    ddd: str = ''  # DDD值
    opip: str = '3'  # 1-门诊 2-住院 3-全院
    transferable: str = '-1'  # 可流转标志
    remark: str = ''  # 备注说明
    med_nation_ins_code: Optional[str]  # 国家医保编码
    material_name: Optional[str]  # 材料名称
    storage_conditions: Optional[str]  # 存储条件
    drug_std_code: Optional[str]
    imported_drug: Optional[str]  # 进口药品
    nation_negotiation_drug: Optional[str]  # 国家谈判药物
    centralized_procurement_seleced_drug: Optional[str]  # 集采药品
    recommend_price: Optional[str]  # 推荐价格


class AppAdministrationMappingPO(PO):
    # SFLZ_AppAdministrationMapping
    id: Optional[PyObjectId]
    app_id: str  # 机构code
    app_adm: str  # 机构给药途径ID
    app_adm_name: str  # 机构给药途径名称
    app_adm_sp: str  # 机构概要途径名称拼音
    std_adm_id: Optional[PyObjectId]  # 对照标准给药途径ID
    opip: int = 3  # 住院门诊标识 3 全院 2 住院 1 门诊


class AppFreqMappingPO(PO):
    # SFLZ_AppFreqMapping
    id: Optional[PyObjectId]
    app_id: str  # 机构ID
    app_freq: str  # 机构给药频次ID
    app_freq_name: str  # 机构给药频次名称
    app_freq_sp: str = ''  # 机构概要频次名称拼音
    app_take_time: str = ''  # 时间
    interval: str = ''  # 最小周期（单位天）
    daliy_count: Optional[int]  # 每日次数
    weekly_count: Optional[int]  # 每周次数
    std_freq_id: Optional[PyObjectId]  # 对照标准给药途径ID
    opip: int = 3  # 住院门诊标识 3 全院 2 住院 1 门诊


class KnowledgeICD10MappingPO(PO):
    # SFLZ_KnowledgeICD10Mapping
    id: Optional[PyObjectId]
    app_id: str
    app_icd10_code: str  # his同步
    app_icd10_fjm: str = ''  # his同步
    app_icd10_name: str  # his同步
    app_pydm: str = ''  # his同步

    icd10_code: Optional[str]  # 知识库icd编码
    icd10_name: Optional[str]  # 知识库icd名称
    remark: str = ''  # 备注
